package cn.lili.event.impl;

import cn.hutool.json.JSONUtil;
import cn.lili.common.utils.BeanUtil;
import cn.lili.event.TradeEvent;
import cn.lili.modules.order.cart.entity.dto.TradeDTO;
import cn.lili.modules.order.order.entity.dos.Receipt;
import cn.lili.modules.order.order.entity.vo.OrderVO;
import cn.lili.modules.order.order.entity.vo.ReceiptVO;
import cn.lili.modules.order.order.service.ReceiptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * 订单创建发票相关处理
 *
 * @author Chopper
 * @since 2020-07-03 11:20
 **/
@Service
public class OrderCreateReceiptExecute implements TradeEvent {

	@Autowired
	private ReceiptService receiptService;

	@Override
	public void orderCreate(TradeDTO tradeDTO) {
		// 根据交易sn查询订单信息
		List<OrderVO> orderList = tradeDTO.getOrderVO();
		// 获取发票信息
		ReceiptVO receiptVO = tradeDTO.getReceiptVO();
		// 如果需要获取发票则保存发票信息
		if (Boolean.TRUE.equals(tradeDTO.getNeedReceipt()) && !orderList.isEmpty()) {
			List<Receipt> receipts = new ArrayList<>();
			for (OrderVO orderVO : orderList) {
				Receipt receipt = new Receipt();
				BeanUtil.copyProperties(receiptVO, receipt);
				receipt.setMemberId(orderVO.getMemberId());
				receipt.setMemberName(orderVO.getMemberName());
				receipt.setStoreId(orderVO.getStoreId());
				receipt.setStoreName(orderVO.getStoreName());
				receipt.setOrderSn(orderVO.getSn());
				receipt.setReceiptDetail(JSONUtil.toJsonStr(orderVO.getOrderItems()));
				receipt.setReceiptPrice(orderVO.getFlowPrice());
				receipt.setReceiptStatus(0);
				receipts.add(receipt);
			}
			// 保存发票
			receiptService.saveBatch(receipts);
		}
	}
}
